﻿#include "common.h"
#include "MyWindow.h"
#include <QFile>

void MyWindow::setInitStyle() {
    // 设置窗口标志以确保窗口可以拖动并且有最大化、最小化按钮
    //this->setWindowFlags(Qt::Window | Qt::WindowMinimizeButtonHint | Qt::WindowMaximizeButtonHint);
    // 禁止最大化和最小化按钮
    /*setWindowFlags(Qt::FramelessWindowHint | Qt::WindowStaysOnTopHint | Qt::WindowCloseButtonHint);*/
    // 设置窗口标题栏样式
    //setWindowFlags(Qt::FramelessWindowHint | Qt::WindowStaysOnTopHint);
    // Qt::FramelessWindowHint：这个标志表示窗口将没有边框，用户不能通过拖动边框来调整窗口的大小，也不能通过拖动标题栏来移动窗口。
    // Qt::WindowStaysOnTopHint：这个标志表示窗口将始终保持在其他窗口的上方，即这个窗口会一直显示在最前面，不会被其他窗口遮挡。
    // 标题栏可拖动
    //setAttribute(Qt::WA_TransparentForMouseEvents);
    // 窗口可拖动
    //setMouseTracking(true);
    // 标题栏高度
    //setFixedHeight(30);

    // 设置窗口不透明度
    //setWindowOpacity(0.9);
    // 设置窗口图标
    //setWindowIcon(QIcon(":/MyWindow/images/icon.png"));

    // 设置窗口背景色
    setStyleSheet("background-color: rgba(55, 55, 55, 0.5)");
    //ui->centralWidget->setStyleSheet("background-color: qlineargradient(x1:0, y1:0, x2:0, y2:1, stop:0 rgba(37, 30, 30, 0.6), stop:1 rgba(138, 230, 138, 0.6));");
    /*
    x1:0, y1:0, x2:0, y2:1：定义渐变的方向是从窗口的顶部到底部（垂直方向）。
    stop:0 rgba(37, 30, 30, 0.6)：定义渐变的起始颜色为rgba(37, 30, 30, 0.6)。
    stop:1 rgba(50, 40, 40, 0.6)：定义渐变的结束颜色为rgba(50, 40, 40, 0.6)。
    */

    // 设置字体颜色
    QPalette palette;
    palette.setColor(QPalette::WindowText, Qt::white);
    setPalette(palette);
    // 设置窗口标题栏背景
    //setStyleSheet("QMainWindow::title {background-color: rgba(255, 0, 0, 0.5);}");

    // 设置按钮样式
    // 定义统一的样式字符串
    QString buttonStyle =
        "QPushButton {\n"
        "    background-color: rgba(255, 0.5);\n"
        "    border: 1px solid rgba(0, 255, 55, 0.3);\n"
        "    border-radius: 5px;\n"
        "    color: white;\n"
        "    padding: 5px;\n"
        "}\n"
        "QPushButton:hover {\n"
        "    background-color: rgba(238, 130, 238, 0.8);\n"
        "}\n"
        "QPushButton:pressed {\n"
        "    background-color: rgba(255, 0, 0, 0.5);\n"
        "}";

    // 需要设置的所有按钮
    QPushButton* buttons[] = {
        ui->pushButton_play,
        ui->pushButton_pause,
        ui->pushButtonVolume,
        ui->pushButtonSpeed,
        //ui->
        ui->pushButton_reset
    };
    for (QPushButton* button : buttons) {
        if (button) {
            button->setStyleSheet(buttonStyle);
            button->installEventFilter(this);
        }
    }

    // 设置均衡器、音量、音调等样式
    // 定义统一的样式字符串
    QString eqSliderStyle =
        "QSlider::groove:vertical {\n"  // 为垂直方向的QSlider的凹槽（groove）设置样式
        "    background: rgba(173, 216, 230, 0.5);\n"  // 设置凹槽的背景色为半透明的浅蓝色
        "    width: 10px;\n"  // 设置凹槽的宽度为10像素
        "    border: none;\n"  // 去除凹槽的边框
        "    border-radius: 5px;\n"  // 设置凹槽的圆角半径为5像素
        "    margin: 0 2px;\n"  // 设置凹槽的外边距，上下为0像素，左右为2像素
        "}\n"
        "QSlider::sub-page:vertical {\n"  // 为垂直方向的QSlider的子页面（sub-page）设置样式
        "    background: transparent;\n"  // 设置子页面的背景色为透明
        "    border: none;\n"  // 去除子页面的边框
        "    width: 50%;\n"  // 设置子页面的宽度为50%
        "    left: 25%;\n"  // 设置子页面相对于凹槽的左边距为25%
        "    border-radius: 6px;\n"  // 设置子页面的圆角半径为6像素
        "}\n"
        "QSlider::add-page:vertical {\n"  // 为垂直方向的QSlider的加页面（add-page）设置样式
        "    background: transparent;\n"  // 设置加页面的背景色为透明
        "    border: none;\n"  // 去除加页面的边框
        "}\n"
        "QSlider::handle:vertical {\n"  // 为垂直方向的QSlider的滑块（handle）设置样式
        "    background: rgba(255, 182, 193, 0.5);\n"  // 设置滑块的背景色为半透明的浅粉色
        "    border: none;\n"  // 去除滑块的边框
        "    border-radius: 10px;\n"  // 设置滑块的圆角半径为10像素
        "    height: 20px;\n"  // 设置滑块的高度为20像素
        "    width: 20px;\n"  // 设置滑块的宽度为20像素
        "    margin: -7px -5px;\n"  // 设置滑块的外边距，上下为-7像素，左右为-5像素，以调整滑块的位置
        "}\n"
        "QSlider::handle:vertical:hover, QSlider::handle:vertical:pressed {\n"  // 为垂直方向的QSlider的滑块在悬停（hover）和按下（pressed）状态设置样式
        "    background: rgba(255, 105, 180, 0.7);\n"  // 设置滑块在悬停和按下状态时的背景色为半透明的深粉色
        "    border: 1px solid rgba(255, 0, 0, 0.5);\n"  // 设置滑块在悬停和按下状态时的边框为半透明的红色
        "}";  // 样式表结束

    // 需要设置的所有 verticalSlider_fXXX
    QSlider* eqSliders[] = {
        // 音率音调
        ui->verticalSliderRate,
        ui->verticalSliderPitch,

        // 均衡器
        ui->verticalSlider_f62,
        ui->verticalSlider_f125,
        ui->verticalSlider_f250,
        ui->verticalSlider_f500,
        ui->verticalSlider_f1000,
        ui->verticalSlider_f2000,
        ui->verticalSlider_f4000,
        ui->verticalSlider_f8000,
        ui->verticalSlider_f16000
    };
    for (QSlider* slider : eqSliders) {
        if (slider) {
            slider->setStyleSheet(eqSliderStyle);
            slider->installEventFilter(this);
        }
    }

    // 设置坐标 Slider 样式
    QFile file(":/MyWindow/style/QtCoordinateSliderStyle.qss");
    if (file.open(QFile::ReadOnly)) {
        QString styleSheet = file.readAll();
        //qDebug() << styleSheet;
        //ui->horizontalSlider->setStyleSheet(styleSheet);
        ui->horizontalSlider_listenerX->setStyleSheet(styleSheet);
        ui->horizontalSlider_listenerY->setStyleSheet(styleSheet);
        ui->horizontalSlider_listenerZ->setStyleSheet(styleSheet);
        file.close();
    }
    else {
        qDebug() << "Failed to open resource file QtCoordinateSliderStyle.qss: " << file.errorString();
    }

    // 设置主进度条样式
    QFile file_main(":/MyWindow/style/QtMainSlider.qss");
    if (file_main.open(QFile::ReadOnly)) {
        QString styleSheet = file_main.readAll();
        //qDebug() << styleSheet;
        ui->horizontalSlider->setStyleSheet(styleSheet);
        file_main.close();
    }
    else {
        qDebug() << "Failed to open resource file QtMainSlider.qss: " << file_main.errorString();
    }
}

void MyWindow::setOpenedStyle(bool reset) {

}

